/**
 * 角色信息管理controller.
 * @author 苏亚欣
 * @version 1.0.0, 2015-07-14
 */
Ext.define('MyApp.controller.RolesCtrl',{
	extend: 'Ext.app.Controller',
	stores:['RolesStore@MyApp.store'],
	models:['MyApp.model.RolesModel'],
	views: [
		'MyApp.view.RolesView'
	],
	requires: [
	    'MyApp.view.RolesEditView',
	    'MyApp.controller.RolesEditCtrl',
	    'MyApp.view.GrantAuthorView',
	    'MyApp.controller.GrantAuthorCtrl'
	    //'MyApp.controller.AssignUserCtrl'
   	],
	init:function(){
		//调用父方法
		this.callParent();
	    this.control({
	    	//查询按钮事件
	    	'rolesview button[name=btn-search]': {
	    		click: this.onSearchRole
	    	},
	    	//清空按钮事件
	    	'rolesview button[name=btn-clear]': {
	    		click: this.onClearRole
	    	},
        	//添加按钮事件
	    	'rolesview button[name=btn-add]': {
	    		click: this.onAddRole
	    	},
	    	//删除按钮事件
	    	'rolesview button[name=btn-delete]': {
	    		click: this.onDeleteRole
	    	},
	    	//启用按钮事件
	    	'rolesview button[name=btn-openStatus]': {
	    		click: this.onOpenStatus
	    	},
	    	//禁用按钮事件
	    	'rolesview button[name=btn-closeStatus]': {
	    		click: this.onCloseStatus
	    	},
			'grid actioncolumn': {
				itemclick: this.onBtnEvent
			},
	    	////表格事件
	    	'rolesview' : {
	    		//视图渲染后事件
				//afterrender: this.onAfterRender,
				//单元格单击事件
	    		cellclick: this.onGridCellClick,
	    		//表格双击事件
	    		itemdblclick: this.onGridItemDblClick
	    	}
	    });
	},
	/**
     * 视图渲染后事件
     */
    onAfterRender: function(grid, eOpts) {
    	//根据用户权限加载功能按钮
		//grid.column.Action(ACBEE.Ext.Util.createEditBtn(grid.functionCodes));
    	WX.Ext.Util.loadFunctionBtns(grid, grid.functionCodes);
    },
    //查询按钮事件处理
	onSearchRole:function(button){
		//取得按钮所在表格
		var grid = button.up('grid');

		//取得表单对象
		var form = grid.down('form');
		//验证表单
		if(!form.isValid()){//表单有错误
			WX.Ext.Util.showAlertBox("查询条件有错误，请修改后再查询！", null, 300);
			return false;
		}
		
		//获得查询条件
		//取得角色名称
		var roleName = grid.down('textfield[name=roles_mame]').getValue();
		//取得状态
	    var status=grid.down('combobox[name=roles_status]').getValue();
	    grid.getStore().proxy.extraParams = {
	    	roleName: roleName,
			status: status
		};
		//重新加载store
		grid.getStore().loadPage(1);
	},
	//清空按钮事件处理方法
	onClearRole:function(button){
		//取得按钮所在表格
		var grid = button.up('grid');
		
		///清空查询条件
		grid.down('textfield[name=roles_name]').setValue('');
		grid.down('combobox[name=roles_status]').setValue('-1');
		
		//调用查询按钮事件
		this.onSearchRole(button);
	},
	//添加按钮事件处理方法
	onAddRole:function(button){
		//加载角色编辑控制器
		WX.Ext.Util.loadController(this.application, "RolesEditCtrl");
		//取得角色window
		var win = WX.Ext.Util.getWin('roleseditview');
		//清除表单内容
		win.down('form').getForm().reset();
		//设置角色Id为空
		win.roleId = 0;
		//保存当前表格的store
		win.parentStore = button.up('grid').getStore();
		win.setTitle('添加权限');
		win.show();
	},
	//修改按钮事件处理方法
	onModifyRole:function(grid, record){
		//加载角色编辑控制器
		WX.Ext.Util.loadController(this.application, "RolesEditCtrl");
		//取得角色window
		var win = WX.Ext.Util.getWin('roleseditview');
		
		//保存原角色Id
		win.roleId = record.data.roles_pk;
		//保存父窗体表格store
		win.parentStore = grid.getStore();
		//将选中记录的数据装载到编辑窗口中
		win.down('form').loadRecord(record);
		win.setTitle('修改权限 [' + record.get('roles_name') + ']');
		win.show();
	},
	//删除按钮事件处理方法
	onDeleteRole:function(button){
		//取得按钮所在表格
		var grid = button.up('grid');
		
		//提交删除表格多条数据
		WX.Ext.Util.ajaxDelGridData(grid, 'roles_pk', '../../../roles/delete.action', '角色');
	},
	//启用按钮事件处理方法
	onOpenStatus:function(button){
		//取得按钮所在表格
		var grid = button.up('grid');

		WX.Ext.Util.ajaxSwitchGridStatus(grid, 'roles_pk', '../../../role/updateStatus.action', '角色', 1, 'roles_status');
	},
	//禁用按钮事件处理方法
	onCloseStatus:function(button){
		//取得按钮所在表格
		var grid = button.up('grid');

		WX.Ext.Util.ajaxSwitchGridStatus(grid, 'roles_pk', '../../../role/updateStatus.action', '角色', 0, 'roles_status');
	},
	/**
	 * 表格单元格单击事件处理方法
	 */
	onGridCellClick: function(grid, td, cellIndex, record, tr, rowIndex, e, eOpts ) {
		//if(5 == cellIndex) {//操作列
			var target = Ext.get(e.getTarget()); //获取事件对象 
			if(target.hasCls('btn-edit')) {//点击了编辑
				this.onModifyRole(grid, record);
			} else if(target.hasCls('btn-delete')) {//点击了删除
				var delInfo = '角色 [' + record.get('roles_name') + ']';
				var id = record.get('roles_pk');
			
				//提交删除当前行数据
				WX.Ext.Util.ajaxDelSingleData(grid, delInfo, id, 'roles/delete.action');
			} else if(target.hasCls('btn-grantAuthor')){//赋权
				//加载赋权控制器
				WX.Ext.Util.loadController(this.application, "GrantAuthorCtrl");
				//取得授权window
				var win = WX.Ext.Util.getWin('grantauthorview');
				win.setTitle('给角色 [' + record.get('roles_name') + '] 赋权');
				win.roleId = record.get('roles_pk');
				win.show();
			}
		//}
	},
	/**
	 * 表格双击事件处理方法
	 */
	onGridItemDblClick: function(grid, record, item, index, e, eOpts) {
		//有编辑权限，则打开编辑界面
		if(-1 != grid.panel.functionCodes.indexOf('edit')) {
			this.onModifyRole(grid, record);
		}
	},

	onBtnEvent: function (column, grid, rowIndex, colIndex, node, e, record, rowEl) {
		if (node.action == 'edit') {
			this.onModifyRole(grid, record);
		}
		else if (node.action == 'delete') {
			var delInfo = '角色 [' + record.get('roles_name') + ']';
			var id = record.get('roles_pk');

			//提交删除当前行数据
			WX.Ext.Util.ajaxDelSingleData(grid, delInfo, id, '../../../roles/delete.action');
		}
		else if (node.action == 'grantAuthor'){
			//加载赋权控制器
			WX.Ext.Util.loadController(this.application, "GrantAuthorCtrl");
			//取得授权window
			var win = WX.Ext.Util.getWin('grantauthorview');
			win.setTitle('给角色 [' + record.get('roles_name') + '] 赋权');
			win.roleId = record.get('roles_pk');
			win.show();
		}
		else if (node.action == 'assignUser'){
			//加载分配用户控制器
			WX.Ext.Util.loadController(this.application, "AssignUserCtrl");
			//取得分配用户window
			var win = WX.Ext.Util.getWin('assignuserview');
			win.setTitle('给角色 [' + record.get('roles_name') + '] 分配用户');
			win.roleId = record.get('roles_pk');
			win.show();
		}
	}
});